package IOAndProperties.IO;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

/*
    java.io.InputStream     此抽象类是表示字节输入流的所有类的超类。
        定义了所有子类共性的方法
         void	close()              关闭此输入流并释放与该流关联的所有系统资源。
         int	read()              从输入流中读取数据的下一个字节。
         int	read(byte[] b)      从输入流中读取一定数量的字节，并将其存储在缓冲区数组 b 中。

     java.io.FileInputStream extends java.io.InputStream
     java.io.FileInputStream 文件字节输入流
     把文件读取到内存中

     构造方法：
        FileInputStream(File file) 通过打开一个到实际文件的连接来创建一个 FileInputStream，该文件通过文件系统中的 File 对象 file 指定。
        FileInputStream(String name) 通过打开一个到实际文件的连接来创建一个 FileInputStream，该文件通过文件系统中的路径名 name 指定。
            参数：
                File file/String name：文件的路径或者文件
            构造方法的作用：
                1、创建一个FileInputStream对象
                2、将构造方法的参数指向FileInputStream对象
*/
public class InputStreamTest01 {
    public static void main(String[] args) throws IOException {
        //1、创建一个FileInputStream对象
        FileInputStream fis1 = new FileInputStream(new File("/Users/ivy/Documents/java/mydir/Input.txt"));
        //2、int	read()              从输入流中读取数据的下一个字节。
        int read;
        /*
        read = fis1.read();
        System.out.println(read);//65
        read = fis1.read();
        System.out.println(read);//66
        read = fis1.read();
        System.out.println(read);//67
        read = fis1.read();
        System.out.println(read);//68
        read = fis1.read();
        System.out.println(read);//-1
        //读取完最后一个字符时，输出-1
        fis1.close();
        */

/*
        以上的读取是一个循环的过程，可以使用while循环来写
        当读取到-1时，停止读取
*/
        while ((read = fis1.read()) != -1) {
            System.out.print((char) read);
            //转换为char类型数据
        }

        /*
        写法错误：输出语句中重复调用read会导致指针不断后移，所以需要一个变量来保存数据，防止重复移动指针
        while ((fis1.read()) != -1) {
            System.out.print((char)fis1.read);
            //转换为char类型数据
        }
        */

    }
}
